package net.shenru.os.task;

import java.util.ArrayList;
import java.util.List;
import java.util.Observer;

/**
 * 任务列队
 */
public class TaskQueue {

	private List<ITask> list;
	private DataObservable observable;

	public TaskQueue() {
		list = new ArrayList<ITask>();
		observable = new DataObservable();
	}

	/** 移除任务 */
	public void remove(ITask task) {
		list.remove(task);
		observable.notifyObservers(task);
	}

	/** 添加任务 */
	public void add(ITask task) {
		list.add(task);
		observable.notifyObservers(task);
	}
	
	/**
	 * 返回左右准备好的任务
	 */
	public  synchronized ArrayList<ITask> getAllTask(){
		ArrayList<ITask> result = new ArrayList<ITask>();
		for(ITask task : list){
			if(task.getStatue() == TaskStatue.Prepare){
				result.add(task);
			}
		}
		return result;
	}

	/**
	 * 返回空闲的任务
	 */
	public synchronized ITask getTask() {
		for (ITask task : list) {
			if (task.getStatue() == TaskStatue.Prepare) {
				return task;
			}
		}
		return null;
	}

	/** 注册任务队列监听 */
	public void regTaskQueueListener(Observer observer) {
		observable.addObserver(observer);
	}

	/** 取消任务队列监听 */
	public void unregTaskQueueListener(Observer observer) {
		observable.deleteObserver(observer);
	}

}
